from django.db.models import F, Q
from product.models import Product
from django.http import HttpResponse
"""
常见场景
-- 字段间比较
-- 字段值自增/自减
"""
def F_query(request):
    # 查询价格大于库存的商品
    products = Product.objects.filter(price__gt=F("stock"))
    print(products)
    # 字段增减
    # 将所有上架的商品热度+100
    Product.objects.filter(is_active=True).update(popularity=F('popularity') + 100)
    # 将所有上架的商品价格打八折
    Product.objects.filter(is_active=True).update(price=F('price') * 0.8)
    # 查询热度是库存10倍以上的商品
    products = Product.objects.filter(popularity__gt=F('stock') * 10)
    print(products)
    return HttpResponse("ok")

def Q_query(request):
    """
    与(and) 查询同时满足多个条件的商品 多个条件用&
    或(or) 查询满足任意条件的商品 多个条件用 | 
    非(not) 排除特定条件的商品  用在条件之前补充 ～
    """
    # 
    # 使用filte()链式调用
    # products= Product.objects.filter(price__gt=1000).filter(stock__lte=200).filter(is_active=True)
    
    # 使用Q对象，& 分割
    # products = Product.objects.filter(Q(price__gt=1000) & Q(stock__lte=200) & Q(is_active=True))
    
    # 使用,分隔 （隐式and）
    products = Product.objects.filter(price__gt=1000,
                           stock__lte=200,
                           is_active=True
                           )
    

    # 找出价格低于500或者热度超过1000或者商品名包含"Pro"的商品
    products =Product.objects.filter(Q(price__lt=500) | Q(popularity__gt=1000) | Q(product_name__contains="Pro") )
    print(products)

    # 找出 非 小米品牌 且 未下架的商品
    products = Product.objects.filter(~Q(product_name__startswith="小米") & ~Q(is_active=False) )
    print(products)

    # 混合查询  找出(价格>1000 或热度 > 500 )且 (库存>10 且 非 下架的商品)
    products=Product.objects.filter( (Q(price__gt=1000) | Q(popularity__gt=500)) & (Q(stock__gt=10) & ~Q(is_active=False)) ) 

    return HttpResponse("ok")
